package org.langqiao.network.socket;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class HtmlJFrame extends JFrame implements ActionListener,ChangeListener{
	private URL url[];//定义一个URL对象数组
	private JComboBox combobox_url;//定义一个组合框，输入或选择URL地址
	private JTextField text_attribute;//定义一个文本行，用于显示文件属性
	private JTabbedPane tab;//选项卡窗格，每页显示一个文件
	public HtmlJFrame()//构造方法
	{
		super("查看源文档");
		this.setBounds(300,240,640,480);//设置窗口的位置和宽度、高度
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭窗口
		String url[]={"http://www.sun.com","http://www.google.com","file://localhost/D:java/java1/swing"};
		combobox_url=new JComboBox(url);//组合框显示URL地址
		combobox_url.setEditable(true);//组合框课编辑，可以输入URL地址
		this.getContentPane().add(combobox_url,"North");//将组合框添加到窗口框架中，设置在北部
		combobox_url.addActionListener(this);//组合框注册单击事件监听器
		tab=new JTabbedPane();//选项卡窗格
		tab.addChangeListener(this);//选项卡窗格注册选择事件监听器
		this.getContentPane().add(tab);//窗口框架添加选项卡窗格
		
		text_attribute=new JTextField();//文本行，显示文件属性
		this.getContentPane().add(text_attribute,"South");//文本行放在窗口框架的最下面
		this.url=new URL[20];//创建URL对象数组
		actionPerformed(null);//调用事件处理方法，初始化
		this.setVisible(true);
		
	}
	public void actionPerformed(ActionEvent e)
	{
		String urlname=(String)combobox_url.getSelectedItem();//获得组合框中选中项的字符窜
		int i=tab.getTabCount();//tab页的数目
		try
		{
			this.url[i]=new URL(urlname);//创建一个URL对象
			InputStreamReader in=new InputStreamReader(this.url[i].openStream());//URL类通过openStream()方法返回一个字节 的输入流
			//由字节输入流创建字符输入流，若url[]指定文件不存在，抛出异常，不添加tab页
			String filename=(String)this.url[i].toString();//将URL对象的名字作为tab页的页名字
			for(int j=i-1;j>=0;j--)//在已有的页面中查找，不打开重复的文件
			if(tab.getTitleAt(j).equals(filename))
			{
			    tab.setSelectedIndex(j);//若找到，选中
			    return;                                  
			}
			JEditorPane preview=new JEditorPane(this.url[i]);//创建指定URL的编辑器窗格
			JTextArea text_content=new JTextArea();//文本区，显示文本内容
			JSplitPane splitter_v=new JSplitPane(JSplitPane.VERTICAL_SPLIT);//垂直分割窗格
			splitter_v.setDividerLocation(200);//设置垂直分隔条位置
			splitter_v.add(new JScrollPane(preview));
			splitter_v.add(new JScrollPane(text_content));
			tab.addTab(filename,splitter_v);//垂直分割窗格,tab中添加新页，
			tab.setSelectedIndex(tab.getTabCount()-1);//tab指定的新页为选中状态
			
			BufferedReader bin=new BufferedReader(in);//通过字节缓冲输入流读取数据
			String aline=bin.readLine();
			while(aline!=null)
			{
				text_content.append(aline+"\r\n");//在文本区读取文件
				aline=bin.readLine();
			}
			bin.close();
			in.close();//关闭文件
		}
		catch(MalformedURLException murle)
		{
			JOptionPane.showMessageDialog(this,"字符窜指定位置协议错误");//JOptionPane,消息对话框
			
		}
		catch(FileNotFoundException fe)
		{
			JOptionPane.showMessageDialog(this,"\""+url[i].getFile()+"\"文件不存在");
		}
		catch(IOException ioex)
		{
			JOptionPane.showMessageDialog(this,"IO错，读取"+url[i].getFile()+"文件不成功");
		}
	}
	public void stateChanged(ChangeEvent e)//当单击选项卡窗格的页标题时触发执行
	{
		String str="文件";
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm");
		int i=tab.getSelectedIndex();
		if(url[i].getProtocol().equals("file"))//当URL对象使用FILE协议时
		{
			File afile=new File(url[i].getFile());//获得文件对象 
			str+=afile.getAbsolutePath()+"\t";//获得文件路径名
			str+=afile.length()+"B\t";//获得文件长度
			str+=sdf.format(new Date(afile.lastModified()));//获得文件修改时间
			try
			{
				InetAddress local=InetAddress.getLocalHost();//返回本地主机
				str+="本机名:"+local.getHostName()+"本机IP地址:"+local.getHostAddress();
			}
			catch(UnknownHostException ioe)
			{
				JOptionPane.showMessageDialog(this,"找不到指定主机的IP地址");
				
			}
		}
		if(url[i].getProtocol().equals("http"))//当前URL对象使用HTTP协议时
		{
			try
			{
				URLConnection urlconn=url[i].openConnection();
				str+=url[i].toString()+"\t";//获得URL路径名
				str+=urlconn.getContentLength()+"B\t";//获得文件长度
				str+=urlconn.getContentType()+"\t";//获得文件类型
				str+=sdf.format(new Date(urlconn.getLastModified()));
				str+="\t主机名："+url[i].getHost();
				str+="\tIP地址："+InetAddress.getByName(url[i].getHost()).getHostAddress();
				
			}
			catch(UnknownHostException ioe)
			{
				JOptionPane.showMessageDialog(this,"找不到主机地址");
				
			}
			catch(IOException ioe)
			{
				JOptionPane.showMessageDialog(this,"IO错，读取"+url[i].getFile()+"文件不成功");
			}
		}
		text_attribute.setText(str);
	}
	public static void main(String[] args)
	{
		new HtmlJFrame();
	}

}
